package controle.aplicativo.apresentacao.controle;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;

import javax.annotation.Resource;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import controle.aplicativo.excecao.MensagemException;
import controle.aplicativo.negocio.aps.ManterEventoAPS;
import controle.aplicativo.negocio.entidade.Evento;
import controle.aplicativo.util.BeanAbstrato;

@Controller
@Scope("session")
public class ManterEventoBean extends BeanAbstrato implements Serializable {

	private static final long serialVersionUID = 6929316813623705850L;
	
	protected static final String URL_EVENTO = "evento.consulta";
	
	private Evento evento;
	private Evento eventoAux;
	private Evento eventoSelecionado;
	
	private Collection<Evento> listaDeEvento;
	
	@Resource
	private transient ManterEventoAPS service;
	
	public void setService(ManterEventoAPS service) {
		this.service = service;
	}
	
	/**
	 * M�todo respons�vel por retornar uma consulta com todos os eventos
	 *  
	 * @return consulta
	 * @throws Exception
	 * @author waltenes.sardinha
	 */
	public Collection<Evento> getTodosEvento() throws Exception {
		return this.service.consultarTodosEvento();
	}
	
	public String abrirEvento(){
		this.setListaDeEvento(this.service.consultarTodosEvento());
		return ManterEventoBean.URL_EVENTO;
	}
	
	/**
	 * M�todo respons�vel por salvar um evento no banco
	 * 
	 * @throws Exception
	 * @author waltenes.sardinha
	 */
	public void salvarEvento() throws Exception{
		 
		try {
			String msg = this.service.salvarEvento(this.getEvento());
			limparCampos();
			this.setMensagem(msg, MSG_TIPO_INFORMACAO, "");
		}catch (final MensagemException e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_AVISO, "");
		}catch (final Exception e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_ERRO, "");
		}
	}
	
	/**
	 * M�todo respons�vel por excluir um evento do banco
	 * 
	 * @throws Exception
	 * @author waltenes.sardinha
	 */
	public void exluirEvento() throws Exception{
		
		try{
			String msg = this.service.excluirEvento(this.getEventoAux());
			limparCampos();
			
			this.setMensagem(msg, MSG_TIPO_INFORMACAO, "");
		}catch (final MensagemException me){
			this.setMensagem(me.getMessage(), MSG_TIPO_AVISO, "");
		}catch (final Exception e){
			this.setMensagem(e.getMessage(), MSG_TIPO_ERRO, "");
		}
		limparCampos();
	}
	
	/**
	 * @return Evento
	 */
	public Evento getEvento() {
		if (evento == null) {
			evento = new Evento();
		}
		return evento;
	}
	
	/**
	 * M�todo que limpa os campos na tela
	 * 
	 * @author waltenes.sardinha
	 */
	public void limparCampos() {
		evento = null;
	}
	
	/**
	 * @param Evento
	 */
	public void setEvento(Evento evento){
		this.evento = evento;
	}
	
	/**
	 * @return EventoAux
	 */
	public Evento getEventoAux(){
		if (eventoAux == null){
			eventoAux = new Evento();
		}
		return eventoAux;
	}
	
	/**
	 * @param participanteAux
	 */
	public void setEventoAux(Evento eventoAux){
		this.eventoAux = eventoAux;
	}

	public Collection<Evento> getListaDeEvento() {
		if (listaDeEvento == null){
			listaDeEvento = new ArrayList<Evento>();
		}
		return listaDeEvento;
	}

	public void setListaDeEvento(Collection<Evento> listaDeEvento) {
		this.listaDeEvento = listaDeEvento;
	}

	public Evento getEventoSelecionado() {
		if (eventoSelecionado == null){
			eventoSelecionado = new Evento();
		}
		
		return eventoSelecionado;
	}

	public void setEventoSelecionado(Evento eventoSelecionado) {
		this.eventoSelecionado = eventoSelecionado;
	}
}